package com.zjsru.plan2023.oneday.oneDay202301;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author: CookLee
 * @Date: 2023/1/27
 * 兼具大小写的最好英文字母
 * 最好 英文字母的大写和小写形式必须 都 在 s 中出现。
 *
 * 英文字母 b 比另一个英文字母 a 更好 的前提是：英文字母表中，b 在 a 之 后 出现。
 *
 * 输入：s = "lEeTcOdE"
 * 输出："E"
 * 解释：
 * 字母 'E' 是唯一一个大写和小写形式都出现的字母。
 *
 * 输入：s = "arRAzFif"
 * 输出："R"
 * 解释：
 * 字母 'R' 是大写和小写形式都出现的最好英文字母。
 * 注意 'A' 和 'F' 的大写和小写形式也都出现了，但是 'R' 比 'F' 和 'A' 更好。
 *
 */
public class GreatestLetter {
    
    /**
     * 哈希表模拟
     *
     * @param s 字符串
     * @return {@link String}
     */
    public String greatestLetter(String s) {
        Map<Character, Integer> map = new HashMap<>();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            map.put(c, map.getOrDefault(c, 0) + 1);
        }
        //从字母表尾部开始循环查找，因为要求返回的字母越大越好
        for (int i = 0; i < 26; i++) {
            if (map.containsKey((char) ('a' + i)) && map.containsKey((char) ('A' + i))) {
                return String.valueOf((char) ('A' + i));
            }
        }
        return "";
    }
    
    public static void main(String[] args) {
        GreatestLetter greatestLetter = new GreatestLetter();
        String s = "AbCdEfGhIjK";
        System.out.println(greatestLetter.greatestLetter(s));
    }
}
